setwd("C:/Users/Fathan/Documents/Obsidian Vault/2. Kuliah/Smt 7 & 8/Visdat-25/Prak 02")

Materi Praktikum

Materi yang akan dibahas dalam praktikum ini adalah:


Perbandingan Kategori

Bar Charts

Diagram batang digunakan untuk membandingkan kategori.

Paired Bar

Membandingkan dua set kategori yang terkait.

Stacked Bar

Menampilkan perbandingan komposisi antar kategori.

Diverging Bar

Menunjukkan distribusi kategori dengan skala positif-negatif.

Dot Plot

Digunakan untuk menunjukkan distribusi atau perbandingan antar kategori.

Marimekko and Mosaic Charts

Visualisasi untuk membandingkan proporsi dua variabel kategori.

Unit, Isotype, and Waffle Charts

Digunakan untuk menampilkan proporsi dalam bentuk ikon atau blok.

Heatmap

Visualisasi matriks yang menggunakan warna untuk mewakili nilai numerik.

Gauge and Bullet Charts

Menampilkan pengukuran dalam format indikator atau skala.

Bubble Comparison and Nested Bubbles

Digunakan untuk menunjukkan hierarki atau hubungan antar data.

Sankey Diagram

Diagram aliran yang menunjukkan hubungan antar kategori.

Waterfall Chart

Menunjukkan perubahan nilai dalam urutan kumulatif.

Conclusion

Ringkasan konsep perbandingan kategori.


Deret Waktu

Line Chart

Grafik garis untuk menunjukkan perubahan data dalam rentang waktu tertentu.

Circular Line Chart

Versi melingkar dari grafik garis, sering digunakan untuk data musiman.

Slope Chart

Menunjukkan perubahan data antara dua titik waktu.

Sparklines

Garis kecil yang menunjukkan tren singkat dalam dataset.

Bump Chart

Menampilkan perubahan peringkat suatu kategori seiring waktu.

Cycle Chart

Menggambarkan pola siklus dalam data deret waktu.

Area Chart & Stacked Area Chart

Memvisualisasikan perubahan dalam data kuantitatif menggunakan area yang diisi warna.

Streamgraph

Menampilkan perubahan dalam data kategorikal dengan bentuk yang mengalir.

Horizon Chart

Efektif untuk menampilkan data deret waktu dengan skala besar.

Gantt Chart

Digunakan untuk perencanaan proyek dan menunjukkan jadwal tugas dalam waktu tertentu.

Flow Charts and Timelines

Menunjukkan urutan kejadian atau alur kerja dalam bentuk diagram.

Connected Scatterplot

Scatterplot dengan garis yang menghubungkan titik-titik berdasarkan urutan waktu.

Conclusion

Ringkasan konsep visualisasi deret waktu.


Distribusi

Histogram

Visualisasi distribusi data berbasis frekuensi dalam bentuk batang.

Pyramid Chart

Digunakan untuk membandingkan distribusi kategori dua arah (misalnya populasi pria vs wanita).

Visualizing Statistical Uncertainty with Charts

Metode visualisasi ketidakpastian statistik dalam data.

Box-and-Whisker Plot

Menampilkan lima ringkasan data: minimum, Q1, median, Q3, dan maksimum.

Candlestick Chart

Digunakan dalam analisis keuangan untuk menunjukkan harga tertinggi, terendah, pembukaan, dan penutupan.

Violin Chart

Kombinasi antara boxplot dan density plot untuk memahami distribusi data.

Ridgeline Plot

Menunjukkan distribusi data yang saling tumpang tindih dalam satu grafik.

Visualizing Uncertainty by Showing the Data

Menunjukkan ketidakpastian dalam visualisasi data.

Stem-and-Leaf Plot

Digunakan untuk menampilkan distribusi angka dengan tetap mempertahankan nilai aslinya.

Conclusion

Ringkasan konsep visualisasi distribusi data.


Geospasial

Choropleth Map

Peta yang menggunakan warna untuk mewakili nilai numerik dalam wilayah geografis.

Cartogram

Peta di mana ukuran geografis diubah berdasarkan nilai data.

Proportional Symbol and Dot Density Maps

  • Proportional symbol map: menggunakan simbol dengan ukuran berbeda untuk mewakili nilai data.
  • Dot density map: menyebarkan titik dalam area geografis untuk menunjukkan kepadatan.

Flow Map

Menunjukkan pergerakan data (misalnya migrasi populasi, aliran lalu lintas) dalam peta.

Conclusion

Ringkasan konsep visualisasi geospasial.

Data Susenas Provinsi Jawa Barat tahun 2020

susenas <- read.csv("Data/Susenas Jawa Barat 2020.csv", sep = ";")
head(susenas)
##   Status_Rawan   Pendidikan_KRT KRT_Rawan Jumlah_Penabung Jumlah_Buta_Huruf
## 1  Tidak_Rawan               SD     Tidak               2                 0
## 2  Tidak_Rawan Perguruan Tinggi     Tidak               3                 0
## 3        Rawan Perguruan Tinggi     Tidak               3                 0
## 4  Tidak_Rawan              SMP     Tidak               0                 1
## 5  Tidak_Rawan               SD     Tidak               0                 0
## 6        Rawan              SMP     Tidak               1                 0
##   Penerima_Transfer Aset_Tanah Akses_Internet Sakit_Namun_Tidak_Rawat_Jalan
## 1             Tidak         Ya             Ya                         Tidak
## 2             Tidak         Ya             Ya                         Tidak
## 3             Tidak         Ya             Ya                         Tidak
## 4             Tidak         Ya          Tidak                         Tidak
## 5             Tidak         Ya          Tidak                         Tidak
## 6             Tidak      Tidak             Ya                         Tidak
##     PKH   KKS  BPNT Bantuan_Pemda  BPJS Jamkesda KIP_PIP Jenis_Atap
## 1 Tidak Tidak Tidak         Tidak Tidak    Tidak   Tidak    Genteng
## 2 Tidak Tidak Tidak         Tidak Tidak    Tidak   Tidak    Genteng
## 3 Tidak Tidak Tidak         Tidak Tidak    Tidak   Tidak      Asbes
## 4 Tidak Tidak Tidak         Tidak    Ya    Tidak   Tidak      Asbes
## 5 Tidak Tidak Tidak         Tidak Tidak    Tidak   Tidak    Genteng
## 6 Tidak Tidak Tidak         Tidak Tidak    Tidak   Tidak      Asbes
##     Jenis_Lantai            Jenis_Dinding Luas_Lantai Listrik Bahan_Bakar_Masak
## 1 Marmer/Keramik Tembok/Plesteran/anyaman          60 Listrik           LPG 3Kg
## 2 Marmer/Keramik Tembok/Plesteran/anyaman         170 Listrik           LPG 3Kg
## 3 Marmer/Keramik Tembok/Plesteran/anyaman          60 Listrik           LPG 3Kg
## 4        Lainnya               Kayu/Papan          48 Listrik           LPG 3Kg
## 5 Marmer/Keramik Tembok/Plesteran/anyaman          54 Listrik           LPG 3Kg
## 6        Lainnya Tembok/Plesteran/anyaman          54 Listrik           LPG 3Kg
##        Sumber_Air_Minum Air_Minum_Layak Sanitasi_Layak KabKota
## 1               Lainnya           Tidak             Ya       1
## 2 Air kemasan/isi Ulang           Tidak             Ya       1
## 3 Air kemasan/isi Ulang           Tidak             Ya       1
## 4 Air kemasan/isi Ulang           Tidak          Tidak       1
## 5               Lainnya           Tidak          Tidak       1
## 6 Air kemasan/isi Ulang           Tidak             Ya       1
namakabupaten <- read.csv("Data/nama kabupaten.csv",sep = ",")
head(namakabupaten)
##   nama_prov value_prov variable_kab      nama_kab value_kab kab
## 1      ACEH         11         R102      SIMEULUE      1101   1
## 2      ACEH         11         R102  ACEH SINGKIL      1102   2
## 3      ACEH         11         R102  ACEH SELATAN      1103   3
## 4      ACEH         11         R102 ACEH TENGGARA      1104   4
## 5      ACEH         11         R102    ACEH TIMUR      1105   5
## 6      ACEH         11         R102   ACEH TENGAH      1106   6

Data Preprocessing

datakab <- namakabupaten[
  namakabupaten$nama_prov == "JAWA BARAT", 
  c("nama_kab", "kab")
]
colnames(datakab) <- c("Nama Kabupaten", "KabKota")

data <- merge(susenas, datakab, by="KabKota")
head(data)
##   KabKota Status_Rawan   Pendidikan_KRT KRT_Rawan Jumlah_Penabung
## 1       1  Tidak_Rawan               SD     Tidak               2
## 2       1  Tidak_Rawan Perguruan Tinggi     Tidak               3
## 3       1        Rawan Perguruan Tinggi     Tidak               3
## 4       1  Tidak_Rawan              SMP     Tidak               0
## 5       1  Tidak_Rawan               SD     Tidak               0
## 6       1        Rawan              SMP     Tidak               1
##   Jumlah_Buta_Huruf Penerima_Transfer Aset_Tanah Akses_Internet
## 1                 0             Tidak         Ya             Ya
## 2                 0             Tidak         Ya             Ya
## 3                 0             Tidak         Ya             Ya
## 4                 1             Tidak         Ya          Tidak
## 5                 0             Tidak         Ya          Tidak
## 6                 0             Tidak      Tidak             Ya
##   Sakit_Namun_Tidak_Rawat_Jalan   PKH   KKS  BPNT Bantuan_Pemda  BPJS Jamkesda
## 1                         Tidak Tidak Tidak Tidak         Tidak Tidak    Tidak
## 2                         Tidak Tidak Tidak Tidak         Tidak Tidak    Tidak
## 3                         Tidak Tidak Tidak Tidak         Tidak Tidak    Tidak
## 4                         Tidak Tidak Tidak Tidak         Tidak    Ya    Tidak
## 5                         Tidak Tidak Tidak Tidak         Tidak Tidak    Tidak
## 6                         Tidak Tidak Tidak Tidak         Tidak Tidak    Tidak
##   KIP_PIP Jenis_Atap   Jenis_Lantai            Jenis_Dinding Luas_Lantai
## 1   Tidak    Genteng Marmer/Keramik Tembok/Plesteran/anyaman          60
## 2   Tidak    Genteng Marmer/Keramik Tembok/Plesteran/anyaman         170
## 3   Tidak      Asbes Marmer/Keramik Tembok/Plesteran/anyaman          60
## 4   Tidak      Asbes        Lainnya               Kayu/Papan          48
## 5   Tidak    Genteng Marmer/Keramik Tembok/Plesteran/anyaman          54
## 6   Tidak      Asbes        Lainnya Tembok/Plesteran/anyaman          54
##   Listrik Bahan_Bakar_Masak      Sumber_Air_Minum Air_Minum_Layak
## 1 Listrik           LPG 3Kg               Lainnya           Tidak
## 2 Listrik           LPG 3Kg Air kemasan/isi Ulang           Tidak
## 3 Listrik           LPG 3Kg Air kemasan/isi Ulang           Tidak
## 4 Listrik           LPG 3Kg Air kemasan/isi Ulang           Tidak
## 5 Listrik           LPG 3Kg               Lainnya           Tidak
## 6 Listrik           LPG 3Kg Air kemasan/isi Ulang           Tidak
##   Sanitasi_Layak Nama Kabupaten
## 1             Ya          BOGOR
## 2             Ya          BOGOR
## 3             Ya          BOGOR
## 4          Tidak          BOGOR
## 5          Tidak          BOGOR
## 6             Ya          BOGOR

Data Quality Checking

sum(is.na(data))
## [1] 0
str(data)
## 'data.frame':    24769 obs. of  27 variables:
##  $ KabKota                      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Status_Rawan                 : chr  "Tidak_Rawan" "Tidak_Rawan" "Rawan" "Tidak_Rawan" ...
##  $ Pendidikan_KRT               : chr  "SD" "Perguruan Tinggi" "Perguruan Tinggi" "SMP" ...
##  $ KRT_Rawan                    : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ Jumlah_Penabung              : int  2 3 3 0 0 1 3 2 1 4 ...
##  $ Jumlah_Buta_Huruf            : int  0 0 0 1 0 0 0 0 0 0 ...
##  $ Penerima_Transfer            : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ Aset_Tanah                   : chr  "Ya" "Ya" "Ya" "Ya" ...
##  $ Akses_Internet               : chr  "Ya" "Ya" "Ya" "Tidak" ...
##  $ Sakit_Namun_Tidak_Rawat_Jalan: chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ PKH                          : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ KKS                          : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ BPNT                         : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ Bantuan_Pemda                : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ BPJS                         : chr  "Tidak" "Tidak" "Tidak" "Ya" ...
##  $ Jamkesda                     : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ KIP_PIP                      : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ Jenis_Atap                   : chr  "Genteng" "Genteng" "Asbes" "Asbes" ...
##  $ Jenis_Lantai                 : chr  "Marmer/Keramik" "Marmer/Keramik" "Marmer/Keramik" "Lainnya" ...
##  $ Jenis_Dinding                : chr  "Tembok/Plesteran/anyaman" "Tembok/Plesteran/anyaman" "Tembok/Plesteran/anyaman" "Kayu/Papan" ...
##  $ Luas_Lantai                  : int  60 170 60 48 54 54 72 60 73 70 ...
##  $ Listrik                      : chr  "Listrik" "Listrik" "Listrik" "Listrik" ...
##  $ Bahan_Bakar_Masak            : chr  "LPG 3Kg" "LPG 3Kg" "LPG 3Kg" "LPG 3Kg" ...
##  $ Sumber_Air_Minum             : chr  "Lainnya" "Air kemasan/isi Ulang" "Air kemasan/isi Ulang" "Air kemasan/isi Ulang" ...
##  $ Air_Minum_Layak              : chr  "Tidak" "Tidak" "Tidak" "Tidak" ...
##  $ Sanitasi_Layak               : chr  "Ya" "Ya" "Ya" "Tidak" ...
##  $ Nama Kabupaten               : chr  "BOGOR" "BOGOR" "BOGOR" "BOGOR" ...
table(data[data$`Nama Kabupaten` == "BANDUNG", ]$KabKota)
## 
##    4   73 
## 1153 1013

Bar Chart

Sederhana

ggplot(data, aes(Status_Rawan)) + 
  geom_bar()

Dengan Warna default

ggplot(data, aes(Status_Rawan, fill=Status_Rawan)) + 
  geom_bar()

Warna Viridis

ggplot(data, aes(Status_Rawan, fill=Status_Rawan)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T)

Warna manual

ggplot(data, aes(Status_Rawan, fill=Status_Rawan)) + 
  geom_bar() + 
  scale_fill_manual(values = c("#FF6961", "#8CD47E"))

Banyak Kategori

ggplot(data, aes(`Nama Kabupaten`, fill=`Nama Kabupaten`)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T)

Ubah angle text

ggplot(data, aes(`Nama Kabupaten`, fill=`Nama Kabupaten`)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

ggplot(data, aes(`Nama Kabupaten`, fill=`Nama Kabupaten`)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T) + 
  theme(axis.text.x = element_text(angle = 75, vjust = 1, hjust = 1))

Hapus legend

ggplot(data, aes(`Nama Kabupaten`, fill=`Nama Kabupaten`)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T) + 
  theme(axis.text.x = element_text(angle = 75, vjust = 1, hjust = 1), 
        legend.position = "none") + ylab("Frekuensi")

Rotasi Barchart

ggplot(data, aes(y = `Nama Kabupaten`, fill=`Nama Kabupaten`)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1), 
        legend.position = "none") + 
  xlab("Frekuensi")

ggplot(data, aes(`Nama Kabupaten`, fill=`Nama Kabupaten`)) + 
  geom_bar() + 
  scale_fill_viridis(discrete = T) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1), 
        legend.position = "none") + 
  ylab("Frekuensi") + 
  coord_flip() + 
  ggtitle("Diagram Batang Kabupaten")

Grouped Bar Chart

ggplot(data, aes(x=`Nama Kabupaten`, fill=Status_Rawan)) + 
  geom_bar(position="dodge")

Stacked Barchart

ggplot(data, aes(x=`Nama Kabupaten`, fill=Status_Rawan)) + 
  geom_bar(position="stack")

Stacked Barchart 100%

ggplot(data, aes(x=`Nama Kabupaten`, fill=Status_Rawan)) + 
  geom_bar(position="fill")

percentDatadaerah <- data %>% 
  group_by(`Nama Kabupaten`) %>% 
  count(Status_Rawan) %>% 
  mutate(ratio=scales::percent(n/sum(n)))

head(percentDatadaerah)
## # A tibble: 6 × 4
## # Groups:   Nama Kabupaten [3]
##   `Nama Kabupaten` Status_Rawan     n ratio
##   <chr>            <chr>        <int> <chr>
## 1 BANDUNG          Rawan          502 23%  
## 2 BANDUNG          Tidak_Rawan   1664 77%  
## 3 BANDUNG BARAT    Rawan          271 28%  
## 4 BANDUNG BARAT    Tidak_Rawan    683 72%  
## 5 BANJAR           Rawan           44 8%   
## 6 BANJAR           Tidak_Rawan    525 92%
ggplot(data, aes(x=`Nama Kabupaten`, fill=Status_Rawan)) + 
  geom_bar(position="fill") + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)) + 
  coord_flip() +
  geom_text(data=percentDatadaerah, aes(y=n, label=ratio),
            color="white", position=position_fill(vjust=0.5), size = 3.5)

Lollipop Chart

percentDatadaerah_rawan <- percentDatadaerah %>%
  filter(Status_Rawan == "Rawan") %>%
  as.data.frame()
head(percentDatadaerah_rawan)
##   Nama Kabupaten Status_Rawan   n ratio
## 1        BANDUNG        Rawan 502   23%
## 2  BANDUNG BARAT        Rawan 271   28%
## 3         BANJAR        Rawan  44    8%
## 4         BEKASI        Rawan 296   14%
## 5          BOGOR        Rawan 382   20%
## 6         CIAMIS        Rawan 291   28%
ggplot(percentDatadaerah_rawan, aes(x=`Nama Kabupaten`, y=n)) + 
  geom_segment(aes(x=`Nama Kabupaten`, xend=`Nama Kabupaten`, y=0, yend=n)) +
  geom_point() + coord_flip()

ggplot(percentDatadaerah_rawan, aes(x = `Nama Kabupaten`, y = n)) + geom_segment(aes(x = `Nama Kabupaten`, xend = `Nama Kabupaten`, y = 0, yend = n)) + geom_point() + coord_flip() + geom_point(size = 4, pch = 21, bg = 5, col = 6)

ggplot(percentDatadaerah_rawan, aes(x = `Nama Kabupaten`, y = n)) + geom_segment(aes(x = `Nama Kabupaten`, xend = `Nama Kabupaten`, y = 0, yend = n), color="grey", lwd=1.5) + geom_point() + coord_flip() + geom_point(size = 5, pch = 21, bg = 6, col = 1) + theme_classic()

ggplot(percentDatadaerah_rawan, aes(x = `Nama Kabupaten`, y = n)) + geom_segment(aes(x = `Nama Kabupaten`, xend = `Nama Kabupaten`, y = 0, yend = n), color="grey", lwd=1.5) + geom_point() + coord_flip() + geom_point(size = 5, pch = 21, bg = 6, col = 1) + theme_classic()

ggplot(percentDatadaerah_rawan, aes(x = `Nama Kabupaten`, y = n)) + geom_segment(aes(x = `Nama Kabupaten`, xend = `Nama Kabupaten`, y = 0, yend = n), color="grey", lwd=1.5) + geom_point() + coord_flip() + geom_point(size = 5, pch = 21, bg = 6, col = 1) + geom_text(aes(label = n), color = "white", size = 2) + theme_classic() 

x = reorder(percentDatadaerah_rawan$`Nama Kabupaten`, percentDatadaerah_rawan$n)
x
##  [1] BANDUNG       BANDUNG BARAT BANJAR        BEKASI        BOGOR        
##  [6] CIAMIS        CIANJUR       CIMAHI        CIREBON       DEPOK        
## [11] GARUT         INDRAMAYU     KARAWANG      KUNINGAN      MAJALENGKA   
## [16] PANGANDARAN   PURWAKARTA    SUBANG        SUKABUMI      SUMEDANG     
## [21] TASIKMALAYA  
## attr(,"scores")
##       BANDUNG BANDUNG BARAT        BANJAR        BEKASI         BOGOR 
##           502           271            44           296           382 
##        CIAMIS       CIANJUR        CIMAHI       CIREBON         DEPOK 
##           291           268           153           477           111 
##         GARUT     INDRAMAYU      KARAWANG      KUNINGAN    MAJALENGKA 
##           275           263           164           191           178 
##   PANGANDARAN    PURWAKARTA        SUBANG      SUKABUMI      SUMEDANG 
##           171           172           201           446           200 
##   TASIKMALAYA 
##           295 
## 21 Levels: BANJAR DEPOK CIMAHI KARAWANG PANGANDARAN PURWAKARTA ... BANDUNG
ggplot(percentDatadaerah_rawan, aes(x = reorder(`Nama Kabupaten`, n), y = n)) + geom_segment(aes(xend = `Nama Kabupaten`, y = 0, yend = n), color="grey", lwd=1.5) + geom_point() + coord_flip() + geom_point(size = 5, pch = 21, bg = 6, col = 1) + geom_text(aes(label = n), color = "white", size = 2) + theme_classic()